#!/bin/env ruby

require "./Objet.rb"

##
#=Classe Equipement
#La classe Equipement gère l'arme et l'armure dont le héros est équipé. La classe Equipement hérite de la classe Objet.
#
#=Attributs :
#[@type] Le type de l'équipement
#[@defense] Représente la statistique de défense du Heros
#[@force] Représente la statistique de force du Heros
#
class Equipement < Objet
	
	$indexType	= {
		"epee"		=> 0,	
		"bouclier"	=> 1
	}
	
	@type #indique quel est type le type de l'equipement(arme,bouclier,...) 
	@defense
	@force
	
	private_class_method :new
	
	#Methode de creation
	def Equipement.fabriquer(id,nom,type,force,defense)
		new(id,nom,type,force,defense)
	end
	
	#Methode d'initialisation	
	def initialize(id,nom,type,force,defense)
		super(id,nom)
		@defense	= defense
		@force		= force
		@type		= type
	end
	
	#accesseurs
    #Retourne @type
	def getType
		return @type
	end
	
    #Affecte @type avec le type passé en paramètre
	def setType(type)
		@type=type
	end
	
    #Retourne @defense
	def getDefense
		return @defense
	end
	
    #Affecte @defense avec la stat passée en paramètre
	def setDefense(stat)
		@defense=stat
	end
	
    #Retourne @force
	def getForce
		return @force
	end
	
    #Affecte @force avec la stat passée en paramètre
	def setForce(stat)
		@force=stat
	end
	
	#methodes d'instances
	#renvoie vrai si l'objet est un equipement
	def estEquipement()
		return true
	end
	
	#ajoute les bonus de l'Equipement au stats du Heros
	def equiper(heros)
		heros.augmenterDefense(@defense)
		heros.augmenterForce(@force)
	end
	
    #Soustrait les statistiques de défense et de force d'un Equipement aux statistiques correspondantes du Heros
	def desequiper(heros)
		heros.diminuerDefense(@defense)
		heros.diminuerForce(@force)
	end
	
	#Ajoute l'equipement à l'Inventaire du Heros en testant si l'Objet déjà présent est meilleur ou non que l'Objet ramassé
	def seFaireRamasserPar(heros, score)
		inventaire	= heros.getInventaire()
		eqtPresent	= inventaire.getListeEqt()[$indexType[@type]]
		
		# il y a déjà un Equipement du meme type
		if(eqtPresent != nil)
			# Le nouvelle equipement self est meilleur echanger 
			if(eqtPresent.compareTo(self) < 0)
				inventaire.retirerEqt(eqtPresent)
				eqtPresent.desequiper(heros)
		
				inventaire.ajouterEqt(self)
				self.equiper(heros)
			end
		# l'emplacement est déjà vide
		else
			inventaire.ajouterEqt(self)
			self.equiper(heros)
		end
	end
	
	#Compare 2 équipements
	def compareTo(equipement)
		egaux		= 0
		moiMeilleur	= 1
		luiMeilleur	= -1
		
		if(equipement != nil)
			case @type
				when "epee"	then
					if(equipement.getForce() > self.getForce())
						return luiMeilleur
					end

				when "bouclier"	then
					if(equipement.getDefense() > self.getDefense())
						return luiMeilleur
					end
			end
		end
		
		return moiMeilleur
	end
	
	#methode d'affichage
	def to_s
		rc	= "\n"
		texte 	= super+rc
		texte += $ref[$langue => "type"].to_s+"\t:  #{@type}"+rc
		texte += $ref[$langue => "force"].to_s+"\t:  #{@force}"+rc
       		texte += $ref[$langue => "defense"].to_s+"\t:  #{@defense}"
		return texte
	end
	
end # Marqueur de fin de classe



